/**
 * 是否为有效的中国大陆手机号
 * @param {string} phone 手机号码
 * @returns {boolean}
 */
export function isPhone(phone) {
  const reg = /^1[3-9]\d{9}$/
  return reg.test(phone)
}

/**
 * 是否为合法邮箱地址
 * @param {string} email 邮箱地址
 * @returns {boolean}
 */
export function isEmail(email) {
  const reg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/
  return reg.test(email)
}

/**
 * 是否为强密码，支持字母+数字+符号组合
 * @param {string} password 密码字符串
 * @param {number} minLength 最小长度，默认8
 * @param {number} maxLength 最大长度，默认20
 * @returns {boolean}
 */
export function isPassword(password, minLength = 8, maxLength = 20) {
  if (password.length < minLength || password.length > maxLength) return false
  const strongRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*]).{8,20}$/
  return strongRegex.test(password)
}

/**
 * 是否为中国大陆身份证号码（15位或18位）
 * @param {string} idCard 身份证号码
 * @returns {boolean}
 */
export function isIdCard(idCard) {
  const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
  return reg.test(idCard)
}

/**
 * 是否为固定电话号码（区号-电话号码 或 区号-三位-四位）
 * @param {string} tel 电话号码
 * @returns {boolean}
 */
export function isTel(tel) {
  const reg = /^(\d{3,4}-)?\d{7,8}(-\d{1,6})?$/
  return reg.test(tel)
}

/**
 * 是否为合法 URL 地址
 * @param {string} url URL 地址
 * @returns {boolean}
 */
export function isUrl(url) {
  const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z]{2,})(:\d+)?(\/($|[a-zA-Z0-9.-]+))*$/i
  return reg.test(url)
}

/**
 * 是否为纯数字
 * @param {string|number} value
 * @returns {boolean}
 */
export function isNumber(value) {
  return !isNaN(parseFloat(value)) && isFinite(value)
}

/**
 * 是否为纯中文字符
 * @param {string} str 字符串
 * @returns {boolean}
 */
export function isChinese(str) {
  const reg = /^[\u4e00-\u9fa5]+$/
  return reg.test(str)
}

/**
 * 是否为空值（null、undefined、空字符串、空对象、空数组）
 * @param {*} value
 * @returns {boolean}
 */
export function isEmpty(value) {
  if (value === null || value === undefined || value === '') return true
  if (typeof value === 'object') {
    return Object.keys(value).length === 0
  }
  return false
}
